home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / Tutorial / Cookbook / 08.copy / MyView.m < prev    next >
Text File  |  1995-06-12  |  2KB  |  69 lines

  1.  
  2. /* Generated by Interface Builder */
  3.  
  4. #import "MyView.h"
  5. #include <dpsclient/wraps.h>
  6. #include <appkit/Application.h>
  7. #include <appkit/Pasteboard.h>
  8.  
  9. @implementation MyView
  10.  
  11. - copy:sender { 
  12.    id pb = [NXApp pasteboard];  /* global Pasteboard object */ 
  13.    NXStream  *st;               /* stream to collect data in */ 
  14.    char      *data;             /* actual data buffer */ 
  15.    int       length;            /* length of data */ 
  16.    int       maxLength;         /* (not used here) */
  17.  
  18.    // To see how to use the pasteboard see page 10-33 of
  19.    // the SysRefMan
  20.    // declare that we will supply a single type of data: PostScript
  21.    [pb declareTypes:&NXPostScriptPboard num:1 owner:self];
  22.  
  23.    /* get a stream which writes to memory */ 
  24.    st = NXOpenMemory( NULL, 0, NX_WRITEONLY );
  25.  
  26.    /* write PostScript code for this view into the stream */ 
  27.    [self copyPSCodeInside:NULL to:st];
  28.  
  29.    /* get actual data buffer from stream */ 
  30.    NXGetMemoryBuffer( st, &data, &length, &maxLength );
  31.  
  32.    /* write PostScript data to pasteboard */ 
  33.    [pb writeType:NXPostScriptPboard data:data length:length];
  34.  
  35.    /* deallocate stream, including its buffer */ 
  36.    NXCloseMemory( st, NX_FREEBUFFER );
  37.  
  38.    return self; 
  39. }
  40.  
  41. /* make this view accept first responder so it will understand copy */
  42. -(BOOL)acceptsFirstResponder
  43. {
  44.     return (YES);
  45. }
  46.  
  47. -resignFirstResponder
  48. {
  49.     return self;
  50. }
  51.  
  52.  
  53. - drawSelf:(NXRect*)r :(int)c
  54. {
  55.     PSsetgray(1.0);
  56.     NXRectFill(r);
  57.     PSsetgray(0.0);
  58.     PSsetlinewidth(4);
  59.     PSnewpath();
  60.     PSmoveto(50.0, 50.0);
  61.     PSlineto(200.0, 200.0);
  62.     PSstroke();
  63.     return self;
  64. }
  65.  
  66.  
  67.  
  68. @end
  69.